﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using itau.im.entidade;

namespace itau.im.dado
{
    public interface ICurvaDAO
    {
        List<Curva> ObterCurvasPorCodigoGrupoParametros(int codigoGrupoParametro, DateTime dataBase);

        int CriarRegistroExecucaoCurvaPontos(RegistroExecucaoCurva registroExecucaoCurva);

        IList<Curva> ObterCurvasPorTipoEntradaDado(int codTipoEntradaDado);

        IList<TipoCurva> ObterTiposCurva();

        IList<Situacao> ObterSituacoes();

        IList<GradeExecucaoCurva> ObterGradesExecucaoCurva();

        IList<TipoTaxa> ObterTiposTaxa();

        IList<TipoEntradaDado> ObterTiposEntradaDado();

        Curva ObterCurva(int curvaID);

        Curva ObterCurvaDefault();

        void EncerrarVigenciaCurvaDefault(DateTime dataFim);

        void CriarCurvaDefault(int codigoCurvaDefault, DateTime dataInicio);

        IList<ModalidadeCurva> ObterModalidadesCurva();

        IList<TaxaPontoCurva> ObterVerticesInterpolacao();

        IList<TaxaPontoCurvaVigente> ObterMetodosInterpolacaoCurva(int curvaID, DateTime dataInclusaoVigencia);

        IList<CategoriaMercado> ObterCategoriasMercado();

        IList<TipoPrazo> ObterTiposPrazo();

        IList<TaxaPontoCurva> ObterMetodosExtrapolacao();

        IList<Cotacao> ObterCotacoes();

        IList<TaxaPontoCurva> ObterMetodosInterpolacao();

        IList<ModeloCalculo> ObterModelosCalculo();

        IList<TaxaPontoCurva> ObterMetodosAntepolacao();

        IList<Curva> ObterCurvas();

        Curva ObterDadosBasicosCurva(int codigoCurva);

        void CriarCurva(Curva curva);

        int ObterCodigoCurvaBase(int codigoCurvaComposta);

        void RemoverCurva(Curva curva);

        void AtualizarCurva(Curva curva);

        ModeloIntervaloTolerancia ObterIntervaloTolerancia(int modeloIntervaloID);

        CurvaVigente ObterCurvaVigente(int curvaID);

        CurvaVigente ObterCurvaVigentePorDataReferencia(int curvaID, DateTime dataReferencia);

        IList<TipoAcaoRetencaoCurva> ObterTiposAcaoRetencaoCurva();

        IList<ItemComposicao> ObterItensComposicao(int curvaCompostaID, DateTime dataInclusaoVigencia);

        IList<CurvaVigente> ObterCurvasVigentePorTipoMesaOrigemCategoria(int mesaID, int tipoCurvaID, int categoriaID, int codigoSituacaoAtiva, int codigoSituacaoPendente);

        IList<Curva> ObterCurvasVigentePorTipoMesaOrigemCategoriaTipoEntrada(int codigoSubmesa, int codigoTipoCurva, int codigoCategoriaMercado, int codigoSituacaoAtiva, int codigoSituacaoPendente, int codigoTipoEntradaDado);

        IList<Curva> ObterCurvasRetidasPorTipoMesaCategoriaSituacao(int tipoCurvaID, int subMesaID, int categoriaMercadoID, int codigoSituacao);

        IList<CurvaVigente> ObterCurvasCompostasVigentesPeloFator(int codigoCurvaComponente);

        IList<ModeloIntervaloTolerancia> ObterIntervalosTolerancia();

        ImportacaoArquivo ObterDadosArquivoImportacao(int codigoCurva, DateTime dataInclusaoVigencia);

        void AtualizarCurvaVigente(CurvaVigente curvaVigente);

        ComposicaoCurva ObterCurvaComposicaoVigente(int codigoCurva, DateTime dataInclusaoVigencia);

        IList<GradeExecucaoCurva> ObterGradesExecucaoCurvasAtivas();

        GradeExecucaoCurva ObterGradeExecucaoCurva(int curvaID);

        IList<RegistroGradeExecucaoCurva> ObterRegistrosGradeExecucaoCurva(int curvaID);

        IList<RegistroGradeExecucaoCurva> ObterRegistrosGradeExecucaoCurvaPorCurvaERangeHorario(int codigoCurva, DateTime horaInicio, DateTime horaFim);

        Curva ObterCurvaPorNomeInterno(string nomeInterno);

        IList<ParametroModeloIntervaloTolerancia> ObterParametrosModeloIntervaloTolerancia(int codigoModelo);

        IList<Curva> ObterCurvasLiberadasPorDataTipoModalidade(DateTime dataExecucao, int tipoCurva, int modalidade);

        void CriarIntervaloTolerancia(ModeloIntervaloTolerancia modeloIntervaloTolerancia);

        void AtualizarIntervaloTolerancia(ModeloIntervaloTolerancia modeloIntervaloTolerancia);

        void RemoverIntervaloTolerancia(int codigoModeloIntervaloTolerancia);

        List<Curva> ObterCurvasPorNome(string nomeCurva);

        List<TipoTaxa> ObterTodosTiposTaxa();

        IList<CurvaVigente> ObterCurvasVigentesPMT(int codigoCurvaPMT);

        IList<Curva> ObterCurvasVigentePorTipoMesaOrigemCategoriaTipoEntradaFacultativo(int codigoSubmesa, int codigoTipoCurva, int codigoCategoriaMercado, int codigoSituacaoAtiva, int codigoSituacaoPendente, int codigoTipoEntradaDado);

        int ObterMaximoDiasExtensaoCurva();
    }
}
